/**
 * Created by Administrator on 2018/10/29 0029.
 */

//账户显示controller   账户余额信息  仓位信息等等   暂时方案1  通过sock进行更新以及发送          暂时方案2  通过手动查询 这个现在应该最优选择--------------------------------------------------------
loginapp.controller('userinfoTableCtrl', function ($scope, $http, NgTableParams,stragegTalbedateService) {


    var self = this
    $scope.Ordersdatas=[]  //委托单table data
    $scope.Treaddatas=[]   //交易单 table data

    userinfolist = []   //账户list  ng-table方式
    positionlist = []   //持仓list  na-table方式
    //接收用户权益数据   如果不存在列表就添加  存在就更新
    socket.on('userinfotable', function (data) {   //用于获取当前用户权益的被动信息

        // console.log(data)
        datas = JSON.parse(data['data']);

        // for (i in userinfolist) {
        //     console.log(userinfolist[i])
        // }
        userinfolist = listupdate(datas, userinfolist, ['symbo'])   //新的数据 对老的数据进行更新
        userinfolist = deletezerolist(userinfolist, "Fund", 0)   //删除无效数据
        self.UserinfoTableParams = new NgTableParams({ count: 50 }, {
            //这里可以增加一个参数  记录当前页 和总页数

            dataset: userinfolist
        });
        $scope.$apply();
    });
//------------------------------------------------------------------------------------------------------------------------查询用户持仓

    function listupdate(newdata, olddata, key) {    //这个函数以后需要移到公共模块组
        var tempdatas = []

        for (i in newdata) {   //遍历所有返回的新对象
            biaozhi = false         //初始化默认在现有的list中没有找到
            for (j in olddata) {   //遍历所有当前的表格数据对象
                boolbiaozhi = false
                if (key.length == 1) {           //如果是一个对比标志
                    //if(tdatas[i].userInfoName==tuserinfolist[j].userInfoName && tdatas[i][key]==tuserinfolist[j][key])
                    boolbiaozhi = (newdata[i].AccountId == olddata[j].AccountId && newdata[i][key[0]] == olddata[j][key[0]])

                } else {                          //如果是两个对比标志
                    boolbiaozhi = (newdata[i].AccountId == olddata[j].AccountId && newdata[i][key[0]] == olddata[j][key[0]] && newdata[i][key[1]] == olddata[j][key[1]])
                }

                if (boolbiaozhi == true) //如果姓名和合约都一样（在old里面找到了） 那么直接更新就行了
                //if(pipeitiaojian(keylist,tdatas[i],tuserinfolist[j])==true)//判断是否重复
                {
                    for (temp in olddata[j]) {               //遍历所有属性
                        olddata[j][temp] = newdata[i][temp]        //对所有属性进行重新更新
                    }
                    biaozhi = true    //设置biaozhi为已找到
                }
            }
            if (biaozhi == false)    //如果没有找到  那么把当前内容添加到现有的list中
            {
                tempdatas.push(newdata[i])   //添加到临时保存list
            }
        }

        for (i in tempdatas)   //如果tempdatas不为空 那就证明有newdata原来在olddata里面不能存在  那么直接添加即可
        {
            olddata.push(tempdatas[i])
        }


        return olddata
    }

    //删除无效数据
    function deletezerolist(tuserinfolist, key, value) {
        //tuserinfolist 需要处理的list
        //key  需要匹配的属性
        //value  配置的值是
        var newLength = tuserinfolist.length;
        for (var j = 0, q = 0; j < newLength; j++, q++) {
            if (tuserinfolist[q][key] == value) {
                tuserinfolist.splice(q, 1);
                q--;
            }
        }
        return tuserinfolist
    }

    // //主动查询用户持仓   启动方法和上面一样 暂时废弃了   如果启动直接关闭py_at_adapter_test.py实例化交易对象时候的定时查询 然后在启用router.py里面的这个主动函数
    // $scope.select_position = function () {
    //     socket.emit('select_position', {data: 'false'})
    // }


    //被动查询用户持仓__on
    socket.on('positiontable', function (data) {   //用于获取当前用户权益的被动信息
        datas = JSON.parse(data['data']);
        positionlist = listupdate(datas, positionlist, ['InstrumentID', 'Direction'])
        positionlist = deletezerolist(positionlist, "Position", 0)
        self.PositionParams = new NgTableParams({count: 50}, {
            dataset: positionlist
        });
        $scope.$apply();
    });

//----------------------------------------------------------------------------------------------------------------查询用户交易订单
//     //主动查询函数
//     $scope.select_trade_orders = function (tiaojian) {
//         socket.emit('select_trade_orders', {selectedName: $scope.selectedName, data: tiaojian})
//         //console.log( $scope.selectedName)
//     }





    //根据订单编号增加发单方式字段 也就是这个单子是由那个策略发送 或者是别的什么字段
    function adddescribe(datas){
           for (orderindex in datas){
               // datas[orderindex]['describe'] ='手动或者仓位同步'
            for(straindex in stragegTalbedateService){
              if (parseInt(datas[orderindex].Custom/1000)==stragegTalbedateService[straindex]['OrderStrateId']){
                    datas[orderindex]['describe'] = stragegTalbedateService[straindex]['id']
               }
            }
        }
        return datas
    }
    //更新订单记录或者交易记录
    function updateOrderOrTrade(tabledate,datas){
                biaozhi=false
                templist=[]
                for(i in datas){
                    for(j in tabledate){
                        if(tabledate[j]['OrderID'] == datas[i]['OrderID']){   //如果存在了更新
                             tabledate[j]=datas[i]
                            biaozhi=true
                        }
                    }
                    if (biaozhi == false){                  //如果没找到那么就添加
                        templist.push(datas[i])
                    }
                }
                for(i in templist){
                    tabledate.push(templist[i])
                }
    }

    //被动接收用户报单记录
    socket.on("ordersTable", function (data) {

        datas=JSON.parse(data['data']);
        datas= adddescribe(datas)
        updateOrderOrTrade($scope.Ordersdatas,datas);
        $scope.$apply();

    });



    //成交记录
     socket.on("tradeTable", function (data) {
        datas=JSON.parse(data['data']);
        datas =adddescribe(datas)
        updateOrderOrTrade($scope.Treaddatas,datas)

        $scope.$apply();
    });

    //-----------------------------------------------------------------------------------------------------------取消订单
    //TODO 这个以后需要修改  修改为后台配置的账户
    $scope.names = ["adong", "xiangke", "xiangke2", "chengcheng"]
    $scope.future_cancel = function (userInfoName, sybom, orderid) {
        socket.emit('future_cancel', {userInfoName: userInfoName, sybom: sybom, orderid: orderid})
    }


});

